define(['../libs/zepto',
	'../common/base',
	'../common/yingSoftCookie',
	'../common/yingSoftPrg',
	'../common/softSetting',
	'../common/ajax',
	'../common/dialog',
	'../common/yingSoftSetTest',
	'../common/agentInfo',
	'../common/userAction'
], function() {
	/********************************************************************************
	考试指南显示
	 ********************************************************************************/
	var G_ArrNodes = []; //存储当前显示菜单的数据
	var G_ArrTitle = []; //存储用户选择过的标题
	var G_testInfoMenuData = ''; //接收考试指南json数据
	var beginTime = ''; //开始阅读指南的时间
	var guideId = '';
	var guideTitle = '';

	/********************************************************************************
	函数名：页面加载函数
	功能：加载时页面，立即触发的事件
	输入参数:无
	返回值： 无
	 ********************************************************************************/
	function init() {
		G_UserAction.loadObject();
		getUserSetting();
		var setHtml = $('#settingDialog').html();
		loadTestInfoMenuJson();
		$('#back').click(function() {
			backClick();
		});
		$('#setting').click(function() {
			G_UserAction.addUserAction('testInfoSettingBtn');
			settingClick(setHtml);
		});

	};
	/********************************************************************************
	函数名：setcpmArrNodes
	功能：未登录登录用户成功登录返回考试指南，设置全局数组数据
	 ********************************************************************************/
	function setcpmArrNodes() {
		var _lastMenuID = G_Prg.getQueryString('lastMenuID', true);
		var _ID = _lastMenuID.substring(0, 3);
		var _idxMenu = 1; //idxMenu为目录的级数
		var _menuName; //当前菜单目录名称
		var _curMenu = G_testInfoMenuData.Childs;
		var _sonMenu; //当前菜单的子菜单
		G_ArrTitle.push('考试指南');
		G_ArrNodes.push(_curMenu);
		while(_curMenu) {
			for(var i = 0 && _ID; i < _curMenu.length; i++) { //在curMenu搜索ID菜单
				if(_curMenu[i].ID !== _ID) {
					continue;
				} else { //找到ID菜单目录
					_menuName = _curMenu[i].Name;
					_sonMenu = _curMenu[i].Childs;
					break;
				}
			}
			if(_sonMenu) {
				G_ArrTitle.push(_menuName);
				G_ArrNodes.push(_sonMenu);
			}
			_idxMenu++;
			if(3 * _idxMenu > _lastMenuID.length) {
				break;
			} else {
				_ID = _lastMenuID.substring(0, 3 * _idxMenu);
			}
			_curMenu = _sonMenu; //下一级目录
		}
	}
	/********************************************************************************
	函数名：loadTestInfoMenuJson
	功能：从服务器获取考试指南目录json数据
	 ********************************************************************************/
	function loadTestInfoMenuJson() {
		var appEName = G_Cookie.getAppEName();
		if(!appEName) {
			G_prg.throw('程序运行错误，testInfoMenu.loadTestInfoMenuJson:appEName="' + appEName + '", 获取数据出现异常');
		}
		var _success = function(json) {
			var jsonData = JSON.parse(json);
			if(jsonData.status === 200) { // 200 获取数据成功
				var data = jsonData.data;
				G_testInfoMenuData = JSON.parse(data);
				var fromUrl = G_Prg.getQueryString('fromUrl');
				if(fromUrl === 'userLogin.html' || fromUrl === 'selectPrice.html') {
					setcpmArrNodes();
					createTestInfoMenuHTML(G_ArrNodes[G_ArrNodes.length - 1]); //显示目录
					//G_Prg.$('back').innerHTML = G_ArrTitle[G_ArrTitle.length - 1]; //显示目录的名称
					var menuName = G_ArrTitle[G_ArrTitle.length - 1];
					if(menuName.length > 12) {
						menuName = menuName.substring(0, 12) + '...';
					}
					G_Prg.$('back').innerHTML = menuName;

					return;
				} else {
					var curMenu = G_testInfoMenuData.Childs;
					G_ArrTitle.push('考试指南');

					var tempArr = [];
					for(var i = 0; i < curMenu.length; i++) {
						if(curMenu[i].Name != '重点考点') {
							tempArr.push(curMenu[i]);
						}
					}
					G_ArrNodes.push(tempArr);
					createTestInfoMenuHTML(tempArr); //显示目录
					return;
				}
			}
		};

		G_AjaxApi_Record.get('/api/testInfoMenu/getTestInfoMenu/' + appEName, true, _success);
	}
	/********************************************************************************
	函数名：createTestInfoMenuHTML
	功能：  动态产生页面内容
	输入参数:curMenu 菜单数组
	 ********************************************************************************/
	function createTestInfoMenuHTML(curMenu) {
		if(!curMenu) { //判断目录是否为空
			var fromUrl = G_Prg.getQueryString('fromUrl');
			window.location.href = fromUrl;
			return;
		}
		$('#menuBar').hide();
		$('#SourceTestInfo').html('');
		window.scrollTo(0, 0);
		addLi(curMenu);
		setCss();
	}
	/********************************************************************************
	函数名：addLi
	功能：动态添加li标签
	输入参数: curMenu 菜单数组
	 *******************************************************************************/
	function addLi(curMenu) {
		var appEName = G_Cookie.getAppEName();
		for(var i = 0; i < curMenu.length; i++) { //遍历数据
			var item = curMenu[i]; //列表id
			var ulTag = $('<ul></ul>');
			ulTag.attr('class', 'soft');
			var spanTag = $('<span></span>');
			spanTag.html(item.Name);

			var liTag = $('<li></li>');
			liTag.attr('id', i);
			liTag.unbind('click').click(function() {
				menuClick($(this).attr('id'));
			});
			//下一层菜单为最后一层时为imgTag标签指定不同的图片
			if(item.Childs) {
				liTag.attr('class', 'chapter_fix1');
			} else {
				var testInfoID = G_Cookie.getTestInfoHistory(G_Cookie.getAppEName());
				if(testInfoID) {
					for(var j = 0; j < testInfoID.length; j++) {
						if(testInfoID[j] === item.ID) {
							liTag.attr('class', 'chapter_fix_visited');
							break;
						} else {
							liTag.attr('class', 'chapter_fix3');
						}
					}
				} else {
					liTag.attr('class', 'chapter_fix3');
				}
			}
			$('#SourceTestInfo').append(ulTag);
			ulTag.append(liTag);
			liTag.append(spanTag);
		}
	}
	/********************************************************************************
	函数名：menuClick
	功能：点击当前目录节点，触发事件
	创建信息：何允俭（2014-07-01）
	输入参数: curMenuArrIndex 数组下标
	 *******************************************************************************/
	function menuClick(curMenuArrIndex) {
		var curMenu = G_ArrNodes[G_ArrNodes.length - 1];
		var menuName = curMenu[curMenuArrIndex].Name;
		var sonMenu = curMenu[curMenuArrIndex].Childs; //子菜单
		G_UserAction.addUserAction('selGuidMenu_' + G_ArrNodes.length + '_' + menuName);

		//点击节点，判断是否有子节点
		if(!sonMenu) { //无子节点
			var preMenuName = G_ArrTitle[G_ArrNodes.length - 1]; //上一级目录名字
			var lastMenuID = curMenu[curMenuArrIndex].ID;
			var userID = parseInt(G_Cookie.getUserID());
			var appEName = G_Cookie.getAppEName();
			if((curMenuArrIndex === '0' || curMenuArrIndex === '1' || curMenuArrIndex === '2') && ((preMenuName.replace(/(^\s*)|(\s*$)/g, "") === '考试大纲') || ((lastMenuID.substring(0, 6) === '001001') && (lastMenuID.substring(0, 3) === '001')))) { //三级目录时：001为考试大纲在sqlite中的InfoID, (lastMenuID.substring(0,6) === '001001')||(lastMenuID.substring(0,3) === '001')。 两级目录时：'考试大纲是解决只有两级目录的时候，如中级经济师（保险）。
				G_ArrTitle.push(menuName);
				G_ArrNodes.push(null);
				G_Cookie.setTestInfoHistory(appEName, curMenu[curMenuArrIndex].ID);
				createTestInfoHtml(appEName, lastMenuID); //显示考试指南信息
			} else {
				if(!userID) { //未登录用户，提示去登录
					var yesCallback = function() {
						window.location.href = '/signin';
					}
					if(typeof(G_maiDian) !== 'undefined') {
						G_maiDian.probationClickCount(); //埋点用户试用
					}
					G_Prg.confirm('请先登录再阅读！', yesCallback);
					return;
				}
				//          if (!G_Prg.checkVipApp()) { //未购买过当前科目的用户，提示用户购买
				//            var eerorBox = $('#nrdvMsgBox');
				//            if (eerorBox && eerorBox.css('display') === 'block') { //判断是否有报错弹窗（被踢下线）
				//              return;
				//            }
				//            if (typeof(G_maiDian) !== 'undefined') {
				//              G_maiDian.probationClickCount(); //埋点用户试用
				//            }
				//              G_Prg.alert('请先购买后再阅读！',function(){
				//                window.location.href = '/recharge';
				//              });
				//            return;
				//          }
				//用户已登录并购买了该科目
				G_ArrTitle.push(menuName);
				G_ArrNodes.push(null);
				G_Cookie.setTestInfoHistory(appEName, curMenu[curMenuArrIndex].ID);
				createTestInfoHtml(appEName, lastMenuID); //显示考试指南信息
			}
		} else { //有子节点，加载子节点
			G_ArrTitle.push(menuName);
			G_ArrNodes.push(sonMenu);
			createTestInfoMenuHTML(sonMenu); //生成菜单html
			//G_Prg.$('back').innerHTML = menuName; //头部显示所选目录的父节点名称
			if(menuName.length > 12) {
				menuName = menuName.substring(0, 12) + '...';
			}
			$('#back').html(menuName); //头部显示所选目录的父节点
		}
	}

	/********************************************************************************
	函数名：createTestInfoHtml
	功能：点击最后层菜单，触发事件显示考试指南信息
	创建信息：何允俭（2014-07-06）
	输入参数: appEName 软件英文名
	lastMenuID  最后节点的ID
	 *******************************************************************************/
	function createTestInfoHtml(appEName, lastMenuID) {
		var _success = function(testInfoHtml) {
			if(testInfoHtml === '') {
				G_Prg.throw('sqlite数据库没有指南信息', backClick);
				return;
			}
			/****埋点统计需要的数据****/
			//        guideId = lastMenuID;
			//        beginTime = G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd hh:mm:ss');
			//        guideTitle = G_ArrTitle[G_ArrTitle.length - 1];
			//        /****埋点统计需要的数据end****/
			//	        if(testInfoHtml.indexOf('<body>') == -1){
			//	         	var bodyText = testInfoHtml;
			//	        }else{
			//	         	var startindex = testInfoHtml.indexOf('<body>') + 6;
			//	          var endindex = testInfoHtml.indexOf('</body>');
			//	          var bodyText = testInfoHtml.substring(startindex, endindex);
			//	        }
			//
			//        if (bodyText.split('REC-html40\">')[1]) { // 特殊处理xhtml
			//          bodyText = bodyText.split('REC-html40\">')[1]; //去除页面头部的英文乱码
			//        }
			//        if (bodyText.split('transitional.dtd">')[1]) { // 特殊处理xhtml
			//          bodyText = bodyText.split('transitional.dtd">')[1]; //去除页面头部的英文乱码
			//        }
			//        if (bodyText.split('loose.dtd">')[1]) { // 特殊处理xhtml
			//          bodyText = bodyText.split('loose.dtd">')[1]; //去除页面头部的英文乱码
			//        }
//			        if(bodyText.indexOf('lang=EN-US>H[~+.gif]</span>］') > 0){
//			        	bodyText = bodyText.replace('H[~+.gif]','H<sup>+</sup>');
//			        	bodyText = bodyText.replace('PCO[2.gif]','PCO<sub>2</sub>');
//			        }else{
//			        	bodyText = G_SetTestInfo.setImgTagURL(bodyText); //处理字符串中的图片地址 setImgTagURL  setImgURL
//			        	bodyText = G_SetTestInfo.setImgURL(bodyText,'guide');
//			        }
			////        console.log(bodyText)
			//        var menuName=G_ArrTitle[G_ArrTitle.length - 1];
			//        if(menuName.length>12){
			//          menuName=menuName.substring(0,12)+'...';
			//        }
			testInfoHtml = JSON.parse(testInfoHtml).data;
			guideId = lastMenuID;
			beginTime = G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd hh:mm:ss');
			guideTitle = G_ArrTitle[G_ArrTitle.length - 1];
			var startindex = testInfoHtml.indexOf('<body>') + 7;
			var startDivindex = testInfoHtml.indexOf("<body lang=ZH-CN link=black vlink=purple style='tab-interval:21.0pt;text-justify-trim:");
			var endindex = testInfoHtml.indexOf('</body>');
			if(testInfoHtml.indexOf("<body>") != -1){
				var bodyText = testInfoHtml.substring(startindex, endindex);
			}else{
				var bodyText = testInfoHtml.substring(startDivindex + 102, endindex);
			}

			if(bodyText.split('REC-html40\">')[1]) {
				bodyText = bodyText.split('REC-html40\">')[1];
			}
			if(bodyText.split('transitional.dtd">')[1]) {
				bodyText = bodyText.split('transitional.dtd">')[1];
			}
			if(bodyText.split('loose.dtd">')[1]) {
				bodyText = bodyText.split('loose.dtd">')[1];
			}
			bodyText = G_SetTestInfo.setImgTagURL(bodyText);
//			bodyText = G_SetTestInfo.setImgURL(bodyText, 'guide');
			var menuName = G_ArrTitle[G_ArrTitle.length - 1];
			if(menuName.length > 12) {
				menuName = menuName.substring(0, 12) + '...';
			}
			$('#back').html(menuName);
			var pre = $('<pre></pre>');
			pre.css({
				'white-space': 'pre-wrap',
				'word-wrap': 'break-word',
				'font-family': 'microsoft yahei'
			});
			pre.append(bodyText);
//			$('#SourceTestInfo').html(pre);
			$('#SourceTestInfo').html(bodyText);
			
			$('#SourceTestInfo').attr('class', 'htmlDiv'); //切换显示考试指南内容的样式
			window.scrollTo(0, 0);
			setCss();
			$('#menuBar').show();
			return;
		};
		G_AjaxApi_Record.get('/api/testInfoMenu/testInfoHtml?appEName=' + appEName + '&lastMenuID=' + lastMenuID, true, _success);

	}

	/********************************************************************************
	函数名：setCss
	功能：设置自定义样式
	 *******************************************************************************/
	function setCss() {
		var sourcrArr = $('.htmlDiv');
		if(sourcrArr.length === 0) {
			$('body').css({
				'background-color': '',
				'color': ''
			});
			return;
		}
		//设置自定义样式
		var fontSize = G_Cookie.getFontSize() || '18px';
		var bgColor = G_Cookie.getDayMode() || G_Cookie.getNightMode() || '#FFF';
		var fontColor = G_Cookie.getDFontColor() || G_Cookie.getNFontColor() || '#000';
		$('body').css('background-color', bgColor);
		$('#SourceTestInfo').css('font-size', fontSize);
		$('body').css('color', fontColor);
		var pTag = $('p'); //p标签内字体颜色大小控制
		for(var i = 0; i < pTag.length; i++) {
			pTag.eq(i).css({
				'font-size': fontSize,
				'color': fontColor,
				'line-height': '135%'
			});
		}
		var tableTag = $('table'); //表格边框控制
		for(var i = 0; i < tableTag.length; i++) {
			tableTag.eq(i).css('border-color', fontColor);
		}
		var imgTag = $('img'); //图片控制
		for(var i = 0; i < imgTag.length; i++) {
			imgTag.eq(i).css({
				'max-width': '100%',
				'height': 'auto'
			});
			if(imgTag.eq(i).attr('src').indexOf('http://t.api.ksbao.com/', 0) > -1) {
				imgTag.eq(i).unbind('click').click(function() {
					var b = $(this);
					G_ImageZoom(b);
				});
			}
		}
		var html = '<img src="/images/back.png" alt="" />';
		$('#back').append()
		var spanTag = $('span'); //span标签内字体颜色大小控制
		for(var i = 0; i < spanTag.length; i++) {
			spanTag.eq(i).css({
				'font-size': fontSize,
				'color': fontColor,
				'line-height': '135%'
			});
		}
		var fontTag = $('font'); //font标签内字体颜色大小控制
		for(var i = 0; i < fontTag.length; i++) {
			fontTag.eq(i).css({
				'font-size': fontSize,
				'color': fontColor,
				'line-height': '135%'
			});
		}
		var tdTag = $('td'); //td标签内字体颜色大小控制
		for(var i = 0; i < tdTag.length; i++) {
			tdTag.eq(i).css({
				'font-size': fontSize,
				'color': fontColor,
				'line-height': '135%'
			});
		}
	}
	/********************************************************************************
	函数名：backClick
	功能：点击返回图标，删当前数组节点，创建上一个数组节点html数据
	 *******************************************************************************/
	function backClick() {
		if(beginTime) { //这里是埋点
			var endTime = G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd hh:mm:ss');
			 if(typeof(G_maiDian)!=='undefined'){
			 G_maiDian.guideClickCount(guideId, beginTime, endTime, guideTitle);
			 }
		}
		beginTime = ''; //退出考试指南的时候清空开始时间

		//是否第一级目录
		if(G_ArrNodes.length === 1 || G_ArrNodes.length === 0) {
			var fromUrl = G_Prg.getQueryString('fromUrl');
			if(!fromUrl || fromUrl === 'login') {
				var fromUrl = '/find';
				window.location.href = fromUrl;
			} else {
				window.location.href = fromUrl + '?fromUrl=examGuide';
			}
			return;
		}
		//在数组的尾部删除元素
		G_ArrNodes.pop();
		G_ArrTitle.pop();
		//获取上一级菜单目录数据
		var curMenu = G_ArrNodes[G_ArrNodes.length - 1];
		$('#SourceTestInfo').attr('class', 'chapter_fix'); //切换显示考试指南目录的样式
		//重新生成菜单html
		createTestInfoMenuHTML(curMenu);
		//头部显示所选目录的父节点name
		var menuName = G_ArrTitle[G_ArrTitle.length - 1];
		if(menuName.length > 12) {
			menuName = menuName.substring(0, 12) + '...';
		}

		$('#back').html(menuName);

	}
	/********************************************************************************
	函数名：settingClick
	功能：软件设置点击事件，弹出软件设置弹出框
	输入参数:setHtml 软件设置弹出框的html
	 ********************************************************************************/
	function settingClick(setHtml) {
		$('#settingDialog').html('')
			// var _setHtml = document.getElementById('settingDialog').innerHTML;
		G_Prg.htmlContent('80%', '200px', '软件设置', '', true); //弹出窗口，把html移动到弹出框，动态添加
		$('#hcdialogBody').html(setHtml);
		$('#hcdvMsgBackBtn').hide();
		$('#hcdvMsgClose').show();
		$('#hcShowBolightBox').unbind('click').click(function() {
			G_DialogContent.dispose();
			$('body').css('overflow', 'scroll');
		});
		softSetting();
	}
	/********************************************************************************
	函数名：softSetting
	功能：软件设置初始化
	输入参数:无
	 ********************************************************************************/
	function softSetting() {
		if(G_Cookie.getNightMode()) {
			setBgColor('night');
			$('#hcdvMsgBox').css('background-color', '#152d35');
		} else {
			setBgColor('day');
			$('#hcdvMsgBox').css('background', '');
		}
		setCss();
		var fontSize = G_Cookie.getFontSize() || '18px';
		$('body').css('font-size', fontSize);
		$('#minusSize').unbind('click').click(function() {
			G_UserAction.addUserAction('setFontBtn3');
			minusSizeClick();
			setCss();
		});
		$('#addSize').unbind('click').click(function() {
			G_UserAction.addUserAction('setFontBtn3');
			addSizeClick();
			setCss();
		});
		$('#dayMode').unbind('click').click(function() {
			G_UserAction.addUserAction('setDayNightBtn3');
			setBgColor('day');
			$('#hcdvMsgBox').css('background', '');
			setCss();
		}); //设置白天模式
		$('#nightMode').unbind('click').click(function() {
			G_UserAction.addUserAction('setDayNightBtn3');
			setBgColor('night');
			$('#hcdvMsgBox').css('background', '#152d35');
			setCss();
		}); //设置夜间模式
	}
	init();
});